<html>
  <head>
    <title>定时器</title>
  </head>
  <script>
    // 定时器

            /*
                一、 setTimeout(callback,delay,rest)

                              设定一个定时器。在定时到期以后执行注册的回调函数


                              1、参数说明

                                              参数	       类型	         必填	        说明

                                          1、callback	  Function	        是	    回调函数

                                          2、delay	    Number	          否	    延迟的时间，函数的调用会在该延迟之后发生，单位 ms

                                          3、rest	      Any	              否	    param1, param2, ..., paramN 等附加参数，它们会作为参数传递给回调函数


                              2、返回值


                                              返回值	    类型	        说明

                                          1、timeoutID	Number	      定时器的编号，这个值可以传递给 clearTimeout 来取消该定时

                二、clearTimeout(timeoutId)

                             取消由 setTimeout 设置的定时器。

                             1、参数说明

                                              参数	    类型	    必填	    说明

                                          1、timeoutID	Number	  是	    要取消的定时器的 ID   




                                        



                       ★、最佳实践
                       
                                 定时器应该在组件、页面销毁时候取消，否则该定时器将会成为 "游离定时器"，无法被回收销毁。

                                 <‘’script lang="ts">
                                      let timer: ReturnType<typeof setTimeout> | null = null;
                                      export default {
                                        data() {
                                          return {};
                                        },
                                        methods: {
                                          onSetTimeout() {
                                            timer = setTimeout(() => {
                                              console.log("setTimeout");
                                            }, 1000);
                                          },
                                          clearTimer() {
                                            // clearTime
                                            if (timer) {
                                              clearTimeout(timer);
                                              timer = null;
                                            }
                                          },
                                        },
                                        beforeUnmount() {
                                          // clearTime
                                          this.clearTimer();
                                        },
                                      };
                                  </‘’script>
            */


            /*
                 三、setInterval(callback,delay,rest)

                           设定一个定时器。按照指定的周期(以毫秒计)来执行注册的回调函数。
                           
                           
                           1、参数说明

                                        参数	      类型	    必填	    说明

                                      1、callback	Function	  是	    回调函数

                                      2、delay	  Number	    否	    执行回调函数之间的时间间隔，单位 ms

                                      3、rest	    Any   	    否	    param1, param2, ..., paramN 等附加参数，它们会作为参数传递给回调函数

                            2、返回值

                                      返回值	    类型	       说明

                                    intervalID	Number	  定时器的编号，这个值可以传递给 clearInterval 来取消该定时


                            3、代码示例

                                       this.timer = setInterval(() => {
                                          //TODO
                                        }, 1000);



                    四、clearInterval(intervalID)

                                  取消由  setInterval 设置的定时器。


                              1、参数说明

                                          参数	      类型	    必填	    说明
                                        intervalID	Number	    是	    要取消的定时器的 ID



                    五、最佳实践

                                <、script lang="ts">
                                    let timer: ReturnType<typeof setTimeout> | null = null;
                                    export default {
                                      data() {
                                        return {};
                                      },
                                      methods: {
                                        onSetTimeout() {
                                          timer = setInterval(() => {
                                            console.log("setInterval");
                                          }, 1000);
                                        },
                                        clearTimer() {
                                          // clearTime
                                          if (timer) {
                                            clearInterval(timer);
                                            timer = null;
                                          }
                                        },
                                      },
                                      beforeUnmount() {
                                        // clearTime
                                        this.clearTimer();
                                      },
                                    };
                                  </、script>
                                      
            */

            /*
                  六、注意事项

                              1、App端返回的定时器编号可能为String类型，使用时无需主动转换为Number类型

                              2、定时器执行间隔并不等于定时器间隔，受很多因素影响，这属于JS执行问题，详见MDN文档： https://developer.mozilla.org/zh-CN/docs/Web/API/setInterval
            */

  </script>
</html>